この 性能の逆説 数学的に完璧なカーネル(例:$out = x + y$)であっても、GPUハードウェアの固定コストを十分に均等化できなければ、CPUループよりも実行速度が悪くなると述べています。これはしばしば 起動課税として現れます。
1. 「正しさ」の誤謬
機能的な正しさは効率性の指標とはなりません。Tritonコードが数千スレッドに仕事を正確に分散しているとしても、作業量全体(N)が小さい場合、GPUは未利用状態のままになります。ハードウェアは実際の演算より、状態遷移に多くの時間を費やします。
2. Pythonによる測定の落とし穴
Pythonから time.time() を使用してGPUコードのベンチマークを取ることは危険です。GPU呼び出しは 非同期であり、Pythonはただ キューに登録 コマンドを登録して次に進みます。 torch.cuda.synchronize()を実行しないと、キューイング時間しか測定できません。同期処理を行うと、 ホストからデバイスへのレイテンシを測定できます。これは、カーネル実行時間よりも10倍長いことがよくあります。
3. レイテンシとスループットの違い
この逆説を克服するには、起動レイテンシを「隠す」だけの作業量を提供しなければなりません。これは、 レイテンシ制限 モード(CPU-GPUバスによって制限される)から スループット制限 モード(GPUメモリまたは計算能力によって制限される)への移行です。
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>